// A greedy Algorithm for filling a group
// Input: Graph G=(V,E); Group S to be filled; 
// integer m = the required size of S (m<0 == no limitation)
// Output: The graph G & the group S after filling S.


#ifndef GREEDYFILLMAXIMALGROUPALGORITHM_H 
#define GREEDYFILLMAXIMALGROUPALGORITHM_H
#include "Vertex.h"
#include "RankSet.h"
#include "Group.h"
#include "Graph.h"
#include "VertexDirectory.h"
#include <cstdlib>
// used when filling a group using GreedyFillGroupAlgorithm::Fill, when no size limitation is
#define NO_SIZE_LIMITATION -1

class GreedyFillMaximalGroupAlgorithm
{
	public:
		// improveGroup: If true, the algorithm will first try to improve the given group, 
		// before trying to replace it with a new group
		static Group& Fill(Graph& graph  /* also output parameter */, Group& group, int iterations,
			double startCouplesPercent, double stopCouplesPercent, int couplesNum, 
			VertexDirectory* dir, bool improveGroup = true);
		
};

#endif //GREEDYFILLMAXIMALGROUPALGORITHM_H
